"""
    4月优化：写入excel方法
"""
# _*_ coding:utf-8 _*_
import os
import sys
import configparser as cparser
import shutil
from API.config import setting
from openpyxl import load_workbook
from openpyxl.styles import Font, Alignment

sys.path.append(os.path.dirname(os.path.dirname(__file__)))  # window环境适配的代码
# sys.path.append(os.path.abspath('..'))# linux环境适配的代码
# --------- 读取config.ini配置文件 ---------------
cf = cparser.ConfigParser()
cf.read(setting.Test_Config, encoding='UTF-8')
name = cf.get("tester", "name")


class WriteExcel:
    # -------------文件写入数据---------------
    def __init__(self, filename, sheetname):
        """
        初始化数据
        :param filename:xls文件名
        :param sheetname:表格名称
        :return: 无
        """
        self.filename = filename
        self.sheetname = sheetname

        # 如果目标文件不存在，则从源文件复制
        if not os.path.exists(self.filename):
            shutil.copyfile(setting.Source_File, setting.Target_File)

        # 打开工作簿和工作表（只加载一次）
        self.wb = load_workbook(self.filename)
        self.ws = self.wb[self.sheetname]

        # 预定义样式（避免重复创建）
        self.font_green = Font(name='宋体', color="00B050", bold=True)  # 绿色
        self.font_red = Font(name='宋体', color="FF0000", bold=True)  # 红色
        self.font_yellow = Font(name='宋体', color="FFD700", bold=True)  # 金黄
        self.align_center = Alignment(horizontal='center', vertical='center')

    def write_data(self, row_num, value):
        """
        将测试结果和测试人员写入表格
        :param row_num:对应行数
        :param value:测试结果值("PASS" 或 "FAIL")
        :return: 无
        """
        # 写入测试结果（第 10 列）
        result_cell = self.ws.cell(row=row_num, column=10, value=value)
        # 设置颜色
        if value == "PASS":
            result_cell.font = self.font_green
        elif value == "FAIL":
            result_cell.font = self.font_red

        # 写入测试人员（第 11 列）
        tester_cell = self.ws.cell(row=row_num, column=11, value=name)
        tester_cell.font = self.font_yellow
        tester_cell.alignment = self.align_center

        # 结果单元格居中对齐
        result_cell.alignment = self.align_center

    def save(self):
        """保存并关闭工作簿"""
        self.wb.save(self.filename)
        self.wb.close()